Les plates-formes de stockage cloud et les divers NAS se sont imposés dans les foyers, on l’utilise tous les jours sans s’en apercevoir, il peut être intéressant de déployer son propre cloud personnel pour conserver certains fichiers sous la main en tout sécurité. L’avantage principal du Cloud personnel est de reprendre le contrôle de ses données personnelles.
Il existe une grande variété de modèles de NAS à tous les prix. Voilà quelques exemples:
Matériels:
- Raspberry Pi 3
- Alimentation RPi (Min 2A)
- carte SD ou clef USB
- Disque USB
- Boitier de protection
- Ventilateur et radiateur
1 – Installation de Rasbian
Pour commencer vous devez installer rasbian sur une carte SD ou une clef USB. Pour installation sur une clef USB consultez mon précédant article.
- Installer Rasbian Stretch Lite
- dans la consol:
1
sudo raspi-config
sudo raspi-config
- activation ssh
- changer password
- changer hostname dans Network Options
- paramétrer clavier wifi et heure en français
2 – Rendre votre pi sécurisé
- Premièrement, ajouter l’utilisateur principal
1
sudo adduser rems
sudo adduser rems
- Puis ajouter utilisateur au group “sudo”
1
sudo adduser rems sudo
sudo adduser rems sudo
3 – Installation LAMP
- avant tout préparer un nom de domaine et son certificat
- ensuite installer la base de donnée maria bd
1 2
sudo apt install mariadb-server sudo mysql_secure_installation
sudo apt install mariadb-server sudo mysql_secure_installation
- puis installer Apache:
1 2
sudo apt install apache2 sudo systemctl status apache2
sudo apt install apache2 sudo systemctl status apache2
- ainsi que php7 et php-fpm
1 2 3 4 5
sudo apt install php7.0-fpm php7.0-mysql php7.0-common php7.0-gd php7.0-json php7.0-cli sudo apt install php7.0-curl libapache2-mod-php7.0 php7.0-mbstring php7.0-xml php7.0-zip sudo apt install php-apcu sudo a2enmod proxy_fcgi setenvif sudo a2enconf php7.0-fpm
sudo apt install php7.0-fpm php7.0-mysql php7.0-common php7.0-gd php7.0-json php7.0-cli sudo apt install php7.0-curl libapache2-mod-php7.0 php7.0-mbstring php7.0-xml php7.0-zip sudo apt install php-apcu sudo a2enmod proxy_fcgi setenvif sudo a2enconf php7.0-fpm
- enfin éditer le fichier
1
sudo nano /etc/apache2/sites-available/000-default.conf
sudo nano /etc/apache2/sites-available/000-default.conf
- pour ajouter la ligne après
1 2 3
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php7.0-fpm.sock|fcgi://localhost/var/www/html/
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php7.0-fpm.sock|fcgi://localhost/var/www/html/
- Enfin Relancer Apache
1
sudo systemctl reload apache2
sudo systemctl reload apache2
Par défaut Apache peut transférer des fichiers de 2Mo maximum, pour cette raison nous allons le modifier pour 20Mo
Editer le php.ini
1 | sudo nano /etc/php/7.0/apache2/php.ini |
sudo nano /etc/php/7.0/apache2/php.ini
puis chercher la ligne
1 | upload_max_filesize = 2M |
upload_max_filesize = 2M
pour cette raison modifier la en
1 | upload_max_filesize = 20M |
upload_max_filesize = 20M
puis chercher la ligne
1 | ;allow_url_fopen = On |
;allow_url_fopen = On
enfin modifier la en
1 | allow_url_fopen = Off |
allow_url_fopen = Off
4 – Installation de NextCloud
Nous allons créer et ce placer dans le dossier download
1 2 | mkdir -p download
cd download |
mkdir -p download cd download
Choisissez bien la dernière version de NextCloud et la télécharger.
1 2 | wget https://download.nextcloud.com/server/releases/nextcloud-13.0.0.zip wget https://download.nextcloud.com/server/releases/nextcloud-13.0.0.zip.sha256 |
wget https://download.nextcloud.com/server/releases/nextcloud-13.0.0.zip wget https://download.nextcloud.com/server/releases/nextcloud-13.0.0.zip.sha256
Décompressez le fichier téléchargé puis l’installer NextCloud:
1 2 3 4 | unzip nextcloud-13.0.0.zip sudo cp -rv nextcloud /var/www/ sudo cp -rv nextcloud /var/www/ sudo mkdir /var/www/data |
unzip nextcloud-13.0.0.zip sudo cp -rv nextcloud /var/www/ sudo cp -rv nextcloud /var/www/ sudo mkdir /var/www/data
Nous allons créer la base de donnée pour notre NC
1 2 | cd mysql -u root -p |
cd mysql -u root -p
taper votre password
1 | create database nextcloud; |
create database nextcloud;
ici user rems et mot de passe password
1 2 3 4 5 | create user rems@localhost identified by 'password'; grant all privileges on nextcloud.* to rems@localhost identified by 'password'; flush privileges; exit sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf |
create user rems@localhost identified by 'password'; grant all privileges on nextcloud.* to rems@localhost identified by 'password'; flush privileges; exit sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Nous allons ajouter les lignes suivantes après
1 2 3 4 5 | # this is only for the mysqld standalone daemon [mysqld] log-bin = /var/log/mysql/mariadb-bin log-bin-index = /var/log/mysql/mariadb-bin.index binlog_format = mixed |
# this is only for the mysqld standalone daemon [mysqld] log-bin = /var/log/mysql/mariadb-bin log-bin-index = /var/log/mysql/mariadb-bin.index binlog_format = mixed
Maintenant redémarrer MySql
1 | sudo systemctl restart mysql |
sudo systemctl restart mysql
Il nous reste d’ajouter hote virtuel pour notre NC
1 | sudo nano /etc/apache2/sites-available/nextcloud.conf |
sudo nano /etc/apache2/sites-available/nextcloud.conf
ajouter les lignes suivantes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <VirtualHost *:80> DocumentRoot "/var/www/nextcloud" ServerName VotreNomDeDomaine.fr ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/nextcloud/> Options +FollowSymlinks AllowOverride All <IfModule mod_dav.c> Dav off </IfModule> SetEnv HOME /var/www/nextcloud SetEnv HTTP_HOME /var/www/nextcloud </Directory> </VirtualHost> |
<VirtualHost *:80> DocumentRoot "/var/www/nextcloud" ServerName VotreNomDeDomaine.fr ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/nextcloud/> Options +FollowSymlinks AllowOverride All <IfModule mod_dav.c> Dav off </IfModule> SetEnv HOME /var/www/nextcloud SetEnv HTTP_HOME /var/www/nextcloud </Directory> </VirtualHost>
Maintenant il faut l’activer notre hote virtuel
1 2 3 4 5 | sudo ln -s /etc/apache2/sites-available/nextcloud.conf /etc/apache2/sites-enabled/nextcloud.conf sudo a2enmod rewrite headers env dir mime ssl sudo a2ensite default-ssl sudo systemctl reload apache2 sudo systemctl daemon-reload |
sudo ln -s /etc/apache2/sites-available/nextcloud.conf /etc/apache2/sites-enabled/nextcloud.conf sudo a2enmod rewrite headers env dir mime ssl sudo a2ensite default-ssl sudo systemctl reload apache2 sudo systemctl daemon-reload
5 – Installation du certificat
Télécharger et installer letsencypt
1 2 | cd /etc sudo wget https://dl.eff.org/certbot-auto |
cd /etc sudo wget https://dl.eff.org/certbot-auto
Modifier les droits
1 | sudo chmod a+x ./certbot-auto |
sudo chmod a+x ./certbot-auto
Lancez la génération du nouveau certificat
1 | ./certbot-auto --apache -d www.votre-domaine.com |
./certbot-auto --apache -d www.votre-domaine.com
accepter les condition puis sélectionner 2
Editer et modifier le fichier nextcloud-le-ssl.conf
1 | sudo nano /etc/apache2/sites-available/nextcloud-le-ssl.conf |
sudo nano /etc/apache2/sites-available/nextcloud-le-ssl.conf
ajouter après SSLCertificateKeyFile…
1 2 3 4 5 | <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure Header always set Referrer-Policy "no-referrer" </IfModule> |
<IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure Header always set Referrer-Policy "no-referrer" </IfModule>
relancer apache
1 2 | sudo systemctl reload apache2
sudo systemctl daemon-reload |
sudo systemctl reload apache2 sudo systemctl daemon-reload
6 – Réglage de NextCloud
Nous allons configurer le cache de nextcloud opcache
editer php.ini
1 | sudo nano /etc/php/7.0/apache2/php.ini |
sudo nano /etc/php/7.0/apache2/php.ini
dans la section opcache ajouter/modifier les lignes suivantes:
1 2 3 4 5 6 7 | opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.revalidate_freq=1 opcache.save_comments=1 |
opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.revalidate_freq=1 opcache.save_comments=1
7 – Déplacer les données NextCloud vers un disque externe
Dans mon cas je veux garder le format de fichier ntfs pour pouvoir lire en cas ou avec windows, libre a vous de choisir un autre format selon vos besoins.
En premier lieu: Montage de partition:
1 2 | sudo apt install ntfs-3g sudo mount -t ntfs-3g /dev/sdb1 /mnt/ncdata |
sudo apt install ntfs-3g sudo mount -t ntfs-3g /dev/sdb1 /mnt/ncdata
Ensuite création d’un point de montage automatique
1 | sudo nano /etc/fstab |
sudo nano /etc/fstab
Enfin ajouter la ligne suivante:
1 | /dev/sdb1 /mnt/ncdata ntfs-3g rw,auto,users,exec,nofail,nls=utf8,umask=007,uid=33,gid=33 0 0 |
/dev/sdb1 /mnt/ncdata ntfs-3g rw,auto,users,exec,nofail,nls=utf8,umask=007,uid=33,gid=33 0 0
redémarrer
Copie du répertoire data sur la nouvelle partition
1 2 | sudo systemctl stop apache2 sudo rsync -avx /var/www/data/ /mnt/ncdata/data |
sudo systemctl stop apache2 sudo rsync -avx /var/www/data/ /mnt/ncdata/data
Nous allons modifier legerement la configuration Nextcloud
1 | sudo nano /var/www/nextcloud/config/config.php |
sudo nano /var/www/nextcloud/config/config.php
puis changer
1 | 'datadirectory' => '/var/www/data', -> 'datadirectory' => '/mnt/ncdata/data', |
'datadirectory' => '/var/www/data', -> 'datadirectory' => '/mnt/ncdata/data',
enfin relancer apache
1 | sudo systemctl start apache2 |
sudo systemctl start apache2
C’est presque terminé executer les commandes suivantes:
1 2 3 | cd /var/www/nextcloud sudo -u www-data php console.php files:scan --all sudo -u www-data php occ maintenance:repair |
cd /var/www/nextcloud sudo -u www-data php console.php files:scan --all sudo -u www-data php occ maintenance:repair
pour finir supprimer le dossier initial de nextcloud
1 | sudo rm -rf /var/www/data |
sudo rm -rf /var/www/data
Conclusion
Tout bien pesé nous avons terminé, votre cloud personnel est sécurisé et opérationnel 😉
Quoi qu’il en soit, si vous voulez pousser un peu plus loin votre installation je vous conseil de consulter le site de soozx.fr qui donne beaucoup d’astuces sur NC et Raspberry Pi.
Renouvellement du certificat
Etant donné que le certificat que nous avons utilisé est valide 90 jours, n’oublier pas de renouveler régulièrement avec la commande:
1 | sudo ./certbotc -auto renew |
sudo ./certbotc -auto renew
En effet vous pouvez également l’automatiser la tache avec le crontab, pour cela editer le fichier crontab
1 | sudo nano crontab -e |
sudo nano crontab -e
pour cette raison ajouter la ligne suivante:
1 | 0 1 89 * * /etc/certbot-auto renew >> /var/log/ssl-renew.log |
0 1 89 * * /etc/certbot-auto renew >> /var/log/ssl-renew.log